|
ARD2
1.00 for Rev B. Hardware
Airbag Reference Demonstrator using MPC5604P
|
00001 00017 #ifndef _FLASH_H 00018 #define _FLASH_H 00019 00020 /* 00021 ************************************************************** 00022 * Defines, Macros and Typedefs 00023 **************************************************************/ 00024 /*** Constant Macros ***/ 00025 /* Default Yes and No defines */ 00026 #ifndef TRUE 00027 #define TRUE (1u) 00028 #endif 00029 #ifndef CLEAR 00030 #define CLEAR (0u) 00031 #endif 00032 #ifndef BITS_IN_NIBBLE 00033 #define BITS_IN_NIBBLE (4u) 00034 #endif 00035 #ifndef BITS_IN_BYTE 00036 #define BITS_IN_BYTE (8u) 00037 #endif 00038 #ifndef BYTES_IN_16 00039 #define BYTES_IN_16 (2u) 00040 #endif 00041 #ifndef BYTES_IN_32 00042 #define BYTES_IN_32 (4u) 00043 #endif 00044 #ifndef BITS_IN_32 00045 #define BITS_IN_32 (32u) 00046 #endif 00047 #ifndef BITS_IN_16 00048 #define BITS_IN_16 (16u) 00049 #endif 00050 #ifndef BIT_DEFINITION 00051 #define BIT_DEFINITION 00052 #define BIT0 (1u << 0u) 00053 #define BIT1 (1u << 1u) 00054 #define BIT2 (1u << 2u) 00055 #define BIT3 (1u << 3u) 00056 #define BIT4 (1u << 4u) 00057 #define BIT5 (1u << 5u) 00058 #define BIT6 (1u << 6u) 00059 #define BIT7 (1u << 7u) 00060 #define BIT8 (1u << 8u) 00061 #define BIT9 (1u << 9u) 00062 #define BIT10 (1u << 10) 00063 #define BIT11 (1u << 11) 00064 #define BIT12 (1u << 12) 00065 #define BIT13 (1u << 13) 00066 #define BIT14 (1u << 14) 00067 #define BIT15 (1u << 15) 00068 #define BIT16 (1u << 16) 00069 #define BIT17 (1u << 17) 00070 #define BIT18 (1u << 18) 00071 #define BIT19 (1u << 19) 00072 #define BIT20 (1u << 20) 00073 #define BIT21 (1u << 21) 00074 #define BIT22 (1u << 22) 00075 #define BIT23 (1u << 23) 00076 #define BIT24 (1u << 24) 00077 #define BIT25 (1u << 25) 00078 #define BIT26 (1u << 26) 00079 #define BIT27 (1u << 27) 00080 #define BIT28 (1u << 28) 00081 #define BIT29 (1u << 29) 00082 #define BIT30 (1u << 30) 00083 #define BIT31 (1u << 31) 00084 #endif 00085 00086 #define CODE_FLASH_ARRAY_0_MIN_ADDRESS (0x00000000u) 00087 #define CODE_FLASH_ARRAY_0_TOP_ADDRESS (0x0007FFFFu) 00088 #define CODE_FLASH_ARRAY_0_SHADOW_TOP_ADDRESS (0x0027FFFFu) 00089 #define CODE_FLASH_ARRAY_0_SHADOW_MIN_ADDRESS (0x00200000u) 00090 #define DATA_FLASH_ARRAY_0_MIN_ADDRESS (0x00800000u) 00091 #define DATA_FLASH_ARRAY_0_TOP_ADDRESS (0x0087FFFFu) 00092 00093 /* Code Flash segments */ 00094 #define CODE_FLASH_F0_SECTOR_MIN (0x00000000u) 00095 #define CODE_FLASH_F0_SECTOR_MAX (0x00007FFFu) 00096 #define CODE_FLASH_F1_SECTOR_MIN (0x00008000u) 00097 #define CODE_FLASH_F1_SECTOR_MAX (0x0000BFFFu) 00098 #define CODE_FLASH_F2_SECTOR_MIN (0x0000C000u) 00099 #define CODE_FLASH_F2_SECTOR_MAX (0x0000FFFFu) 00100 #define CODE_FLASH_F3_SECTOR_MIN (0x00010000u) 00101 #define CODE_FLASH_F3_SECTOR_MAX (0x00017FFFu) 00102 #define CODE_FLASH_F4_SECTOR_MIN (0x00018000u) 00103 #define CODE_FLASH_F4_SECTOR_MAX (0x0001FFFFu) 00104 #define CODE_FLASH_F5_SECTOR_MIN (0x00020000u) 00105 #define CODE_FLASH_F5_SECTOR_MAX (0x0003FFFFu) 00106 #define CODE_FLASH_F6_SECTOR_MIN (0x00040000u) 00107 #define CODE_FLASH_F6_SECTOR_MAX (0x0005FFFFu) 00108 #define CODE_FLASH_F7_SECTOR_MIN (0x00060000u) 00109 #define CODE_FLASH_F7_SECTOR_MAX (0x0007FFFFu) 00110 00111 /* Data Flash segments */ 00112 #define DATA_FLASH_F0_SECTOR_MIN (0x00800000u) 00113 #define DATA_FLASH_F0_SECTOR_MAX (0x00803FFFu) 00114 #define DATA_FLASH_F1_SECTOR_MIN (0x00804000u) 00115 #define DATA_FLASH_F1_SECTOR_MAX (0x00807FFFu) 00116 #define DATA_FLASH_F2_SECTOR_MIN (0x00808000u) 00117 #define DATA_FLASH_F2_SECTOR_MAX (0x0080BFFFu) 00118 #define DATA_FLASH_F3_SECTOR_MIN (0x0080C000u) 00119 #define DATA_FLASH_F3_SECTOR_MAX (0x0080FFFFu) 00120 #define DATA_FLASH_SECTOR_SIZE (0X00004000u) 00121 00122 /* Lock keys */ 00123 #define FLASH_PRIMARY_LOCK_KEY (0xA1A11111u) 00124 #define FLASH_SECONDARY_LOCK_KEY (0xC3C33333u) 00125 #define FLASH_ALLOW_COMPLETE_REFLASH (0x00100000u) 00126 00127 /* Time-outs */ 00128 #define FLASHING_TIMEOUT (0xF000u) 00129 #define ERASING_TIMEOUT (0x1000000u) 00130 00131 /* Status messages */ 00132 #define STATUS_FLASHING_TIME_OUT (0x01u) 00133 #define STATUS_PROGRAMMED_WRONG (0x02u) 00134 00135 /* Routine sizes */ 00136 #define FLASH_ROUTINE_SIZE (0xDEu) 00137 #define ERASE_ROUTINE_SIZE (0x7Cu) 00138 00139 /* To use RAM, we need to define an address to which we'll copy our */ 00140 /* function and from which we will execute */ 00141 #define RAM_ADDRESS_FOR_FLASHING_ROUTINE (0x40000000u) 00142 00143 /*** Function Macros ***/ 00144 #ifndef N_ELEMENTS 00145 #define N_ELEMENTS(X) (sizeof(X)/sizeof(*(X))) 00146 #endif 00147 #define PROGRAM ((uint8_t(*)(uint32_t* pu32Addrss, uint32_t* pu32Wrd, \ 00148 Flash_t ptInst, uint8_t u8TwoBytsAOnc))\ 00149 (RAM_ADDRESS_FOR_FLASHING_ROUTINE)) 00150 #define ERASE ((uint8_t(*)(Flash_t ptFlashInstance, uint32_t u32LMS))\ 00151 (RAM_ADDRESS_FOR_FLASHING_ROUTINE)) 00152 00153 00154 /*** Enums ***/ 00155 enum FLASH_TYPE 00156 { 00157 NOT_FLASHABLE = 0x7Fu, CODE_FLASH, CODE_FLASH_SHADOW, DATA_FLASH 00158 }; 00159 enum FLASH_SECTOR 00160 { 00161 F0 = 0, F1, F2, F3, F4, F5, F6, F7 00162 }; 00163 enum FLASH_OPERATION 00164 { 00165 DOUBLE_WORD_PROGRAM = 0x52u, SECTOR_ERASE, ARRAY_INTEGRITY_CHECK, 00166 MARGIN_READ, ECC_LOGIC_CHECK 00167 }; 00168 /*** TypeDefs ***/ 00169 typedef volatile struct CFLASH_tag* Flash_t; 00170 /* 00171 ************************************************************** 00172 * Declarations 00173 **************************************************************/ 00174 /*** Extern ***/ 00175 00176 /*** Globals ***/ 00177 00178 /*** Static Globals ***/ 00179 00180 /* 00181 ************************************************************** 00182 * Function Prototypes 00183 **************************************************************/ 00184 /* 00185 ****************************************************************************** 00186 * 00187 * Function: u8fnFlashWriteDataFromRAM() 00188 * 00189 */ 00203 static uint8_t u8fnFlashWriteDataFromRAM(uint32_t* pu32AddressToWrite, \ 00204 uint32_t* pu32ValueToWrite, \ 00205 Flash_t ptFlashInstance, \ 00206 uint8_t u8TwoContiguousWords); 00207 /* 00208 ****************************************************************************** 00209 * 00210 * Function: u8fnFlashEraseFromRAM() 00211 * 00212 */ 00223 static uint8_t u8fnFlashEraseFromRAM(Flash_t ptFlashInstance, uint32_t u32LMS); 00224 /* 00225 ****************************************************************************** 00226 * 00227 * Function: u8fnFlashWrite() 00228 * 00229 */ 00241 uint8_t u8fnFlashWrite(uint32_t* pu32Source, uint32_t* pu32Destination, \ 00242 uint16_t u16Size); 00243 /* 00244 ****************************************************************************** 00245 * 00246 * Function: u8fnFlashErase() 00247 * 00248 */ 00259 uint8_t u8fnFlashErase(uint32_t* pu32DataToErase); 00260 /* 00261 ****************************************************************************** 00262 * 00263 * Function: u8fnReturnTypeOfFlash() 00264 * 00265 */ 00273 static uint8_t u8fnReturnTypeOfFlash(uint32_t u32Location); 00274 /* 00275 ****************************************************************************** 00276 * 00277 * Function: tfnFlashSelectInstance() 00278 * 00279 */ 00287 static Flash_t tfnFlashSelectInstance(uint8_t u8Instance); 00288 /* 00289 ****************************************************************************** 00290 * 00291 * Function: tfnFlashSelectInstance() 00292 * 00293 */ 00300 static uint8_t u8fnFlashReadBackInstance(Flash_t ptFlashInstance); 00301 /* 00302 ****************************************************************************** 00303 * 00304 * Function: u8fnReturnDataFlashSector() 00305 * 00306 */ 00313 static uint8_t u8fnReturnDataFlashSector(uint32_t u32Address); 00314 /* 00315 ****************************************************************************** 00316 * 00317 * Function: u8fnReturnCodeFlashSector() 00318 * 00319 */ 00326 static uint8_t u8fnReturnCodeFlashSector(uint32_t u32Address); 00327 /* 00328 ****************************************************************************** 00329 * 00330 * Function: u32fnFlashSectorToLMS() 00331 * 00332 */ 00339 static uint32_t u32fnFlashSectorToLMS(uint8_t u8Sector); 00340 00341 #endif /* _FILENAME_H */